clutter_actor_grab_key_focus (priv->entry);
}
+static gboolean
+actor_contains (ClutterActor *widget,
+ ClutterActor *other)
+{
+ while (other != NULL && other != widget)
+ other = clutter_actor_get_parent (other);
+ return other != NULL;
+}
+
static gboolean
st_entry_enter_event (ClutterActor *actor,
ClutterCrossingEvent *event)
{
StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
- if (priv->hint && priv->hint_visible)
+ if (actor_contains (actor, event->source)
+ && priv->hint && priv->hint_visible)
{
st_widget_set_hover (ST_WIDGET (actor), TRUE);
}
st_entry_leave_event (ClutterActor *actor,
ClutterCrossingEvent *event)
{
- st_widget_set_hover (ST_WIDGET (actor), FALSE);
+ if (!actor_contains (actor, event->related))
+ st_widget_set_hover (ST_WIDGET (actor), FALSE);
return CLUTTER_ACTOR_CLASS (st_entry_parent_class)->leave_event (actor, event);
}